<?php

namespace dao;

use dao\fcfDao;
use utils\Utils;
use controladores\Logger;

class noticiasDao extends fcfDao{

	/**
	 * Retorna todos los usuarios
	 */
	function getCountNoticias(){
		
		try {
			return $this->selectRow("SELECT COUNT(*) AS total FROM noticias WHERE COD_PORTAL=100");
		}catch (\Exception $e) {
			Logger::insert(__CLASS__.":".__FUNCTION__,$e,$queryString);
		}
	}

	/**
	 * 
	 */
	function getNoticias(){
		try {
			return $this->select("SELECT * FROM noticias ");
		}catch (\Exception $e) {
			Logger::insert(__CLASS__.":".__FUNCTION__,$e,$queryString);
		}
	}
	
	/*
	 * 
	 */
	function getNoticiaPorCodigo($cod_portal){
		try {
			return $this->selectRow("SELECT * FROM noticias t1 LEFT JOIN noticias_cuerpo t2 ON t1.COD_NOTICIA=t2.COD_NOTICIA WHERE t1.COD_NOTICIA=".$cod_portal);
		}catch (\Exception $e) {
			Logger::insert(__CLASS__.":".__FUNCTION__,$e,$queryString);
		}
	}
	
	/*
	 * DEFINIR CAMPOS
	 * Devuelve las noticias por idioma ordenadas por fecha con sort y limit,usado en el buscador de noticias
	 * idx ind_noticias_fecha
	 */
	function getNoticiasPorIdiomaSortLimit($idioma,$sort,$limit){
		$idioma = fcfDao::$con->real_escape_string($idioma);
		$sort = fcfDao::$con->real_escape_string($sort);
		$limit = fcfDao::$con->real_escape_string($limit);
		try {
			return $this->select("SELECT * FROM noticias WHERE IDIOMA=".$idioma." AND eliminada=0 ORDER BY FECHA DESC LIMIT ".$sort.",".$limit);
		}catch (\Exception $e) {
			Logger::insert(__CLASS__.":".__FUNCTION__,$e,$queryString);
		}
	}
		
	/*
	 * DEFINIR CAMPOS
	 * Devuelve las noticias buscando por titulo e idioma ordenadas por fecha con sort y limit,usado en el buscador de noticias
	 * idx ind_noticias_fecha
	 */
	function getNoticiasPorBusquedaTitulo($info){

		$titulo = fcfDao::$con->real_escape_string($info->titulo);
		$idioma = fcfDao::$con->real_escape_string($info->idioma);
		$sort =  fcfDao::$con->real_escape_string($info->sort);
		$limit = fcfDao::$con->real_escape_string($info->limit);
		
		try {
			return $this->select("SELECT * FROM noticias WHERE IDIOMA=".$idioma." AND TITULO LIKE '%".$titulo."%' ORDER BY FECHA DESC LIMIT ".$sort.",".$limit) ;
		}catch (\Exception $e) {
				Logger::insert(__CLASS__.":".__FUNCTION__,$e,$queryString);
		}
	}
	
	/*
	 * Devuelve un listado con las galerias disponibles para vincular con las noticias
	 */
	function getGalerias(){
		try {
			return $this->select("SELECT id,nom FROM galerias WHERE visible=1") ;
		}catch (\Exception $e) {
			Logger::insert(__CLASS__.":".__FUNCTION__,$e,$queryString);
		}
	}
	
	/*
	* Devuelve un listado con las categorias de las noticias
	*/
	function getCategorias(){
		try {
			return $this->select("SELECT id,nom FROM noticias_categorias WHERE activo=1") ;
		}catch (\Exception $e) {
			Logger::insert(__CLASS__.":".__FUNCTION__,$e,$queryString);
		}
	}
	
	/*
	 * 
	 */
	function getCategoriaPorId($id){
		try {
			return $this->selectRow("SELECT id,nom FROM noticias_categorias WHERE id=".$id);
		}catch (\Exception $e) {
			Logger::insert(__CLASS__.":".__FUNCTION__,$e,$queryString);
		}
	}
	
	/*
	 * 
	 */
	function getImagenesGaleriaAsociada($id_galeria){
		try {
			return $this->selectRow("SELECT nom FROM fotos WHERE id_galeria=".$id_galeria) ;
		}catch (\Exception $e) {
			Logger::insert(__CLASS__.":".__FUNCTION__,$e,$queryString);
		}
	}
	
	/*
	 * Devuelve las imagenes de una galeria concreta
	 */
	function getNomGaleria($id){
		try {
			return $this->selectRow("SELECT id,nom FROM galerias WHERE id=".$id) ;
		}catch (\Exception $e) {
			Logger::insert(__CLASS__.":".__FUNCTION__,$e,$queryString);
		}
	}
	
	/*
	* Elimina una categoria (cambia estado activo a false)
	*/
	function eliminarCategoria($id){
		
		try {
			return $this->update("UPDATE noticias_categorias SET activo = 0 WHERE id = '".$id."';");
		}catch (\Exception $e) {
			Logger::insert(__CLASS__.":".__FUNCTION__,$e,$queryString);
		}
	}
	
	/*
	 * Crea una categoria con el nombre recibido de la misma 
	 */
	function crearCategoria($nombre){
	
		$nombre = fcfDao::$con->real_escape_string($nombre);
		
		try {
			return $this->insert("INSERT INTO noticias_categorias (id,nom,tipo,activo) VALUES (null,'".$nombre."',null,1);");
		}catch (\Exception $e) {
			Logger::insert(__CLASS__.":".__FUNCTION__,$e,$queryString);
		}
	}
	
	/*
	 * Elimina una noticia(cambia estado ELIMINADA a true ) 
	 */
	function eliminarNoticia($cod_noticia){
		try {
			return $this->insert("UPDATE noticias SET ELIMINADA  = TRUE WHERE COD_NOTICIA = ".$cod_noticia.";");
		}catch (\Exception $e) {
			Logger::insert(__CLASS__.":".__FUNCTION__,$e,$queryString);
		}
	}
	
	/*
	 * Inicia transaccion, si al ejecutar la primera query ( crear noticia en la tabla noticias) no se ejecutara la siguiente query 
	 * que guarda el contenido de la noticia en la tabla noticias_cuerpo
	 */
	function insertarNuevaNoticia($info){
		try {
			/* Definimos autocommit false para iniciar transaccion */
			fcfDao::$con->autocommit(FALSE);
			/* Insertarmos noticia en la tabla noticias */
			$res = fcfDao::$con->query($this->nuevaNoticia($info));
			//guarda el codigo de la noticia que se va a guardar
			$last_inserted_id = fcfDao::$con->insert_id;
			//si falla la query lanzamos excepcion 
			if($res === false) {
				throw new \Exception('Error: '.fcfDao::$con->error);
			}
			/* Insertamos el contenido de la noticia en la tabla noticias_cuerpo,con el codigo de noticia retornado de la funcion nuevaNoticia */
			$res = fcfDao::$con->query($this->contenidoNuevaNoticia($last_inserted_id,$info->contingut));

			if($res === false) {
				throw new \Exception('Error: '.fcfDao::$con->error);
			}
			//Hacemos commit a las dos consultas
			fcfDao::$con->commit();
			$aux = new \stdClass();
			$aux->result = true;
			$aux->cod_noticia = $last_inserted_id;
			return $aux;
	
		} catch (\Exception $e) {
			
			fcfDao::$con->rollback();
			return false;
		}
		/* switch back autocommit status */
		fcfDao::$con->autocommit(TRUE);
	}
	
	/*
	 * Devuelve query para insertar la noticia
	 */
	function nuevaNoticia($info){
		
		$aux = new \stdClass();
		$aux->autor = fcfDao::$con->real_escape_string($info->autor);
		$aux->titulo = fcfDao::$con->real_escape_string($info->titulo);
		$aux->avantitol = fcfDao::$con->real_escape_string($info->avantitol);
		$aux->categoria = $info->categoria;
		$aux->fecha_caducidad = Utils::unixToMySQL($info->fecha_caducidad);
		$aux->fecha_publicacion = Utils::unixToMySQL($info->fecha_publicacion);
		
		if(empty($info->galeria_asociada)){ 
			$aux->galeria_asociada = 'null'; 
		}else{ 
			$aux->galeria_asociada = $info->galeria_asociada;
		}
		
		$aux->idioma = $info->idioma;
		$aux->imagen_portada = fcfDao::$con->real_escape_string($info->imagen_portada);
		
		if(!empty($info->publicada) and $info->publicada == 'on'){ $aux->publicada = true; }else{ $aux->publicada = false; }
		
		$aux->resumen = fcfDao::$con->real_escape_string($info->resumen);
		
		if($info->video == "true"){ 
			$aux->video = true ; 
			$aux->video_noticia= fcfDao::$con->real_escape_string($info->video_noticia); 
		}else{ 
			$aux->video = 0 ;
			 $aux->video_noticia = null;
		}
		$aux->documentos = json_encode(array_filter(explode("&",$info->documents_afegits)));

		$query = "INSERT INTO noticias (COD_NOTICIA,COD_PORTAL,IDIOMA,AUTOR,TITULO,ABSTRACT,ANTETITULO,IMAGEHOME,PUBLICADA,VIDEO,VIDEO_NOTICIA,GALERIA_ASOCIADA,CATEGORIA,FECHA,DOCUMENTOS,FECHA_PUBLICACION,FECHA_CADUCIDAD)
				  VALUES (null,'100',".$aux->idioma.",'".$aux->autor."','".$aux->titulo."','".$aux->resumen."','".$aux->avantitol."',
				  		   '".$aux->imagen_portada."',".$aux->publicada.",".$aux->video.",'".$aux->video_noticia."',".$aux->galeria_asociada.",
				  		   ".$aux->categoria.",CURRENT_TIMESTAMP,'".$aux->documentos."','".$aux->fecha_publicacion."','".$aux->fecha_caducidad."');";
		return $query;

	}

	/*
	 * Devuelve la query para introducir el contenido de la noticia
	 */
	function contenidoNuevaNoticia($cod_noticia,$contenido){
		$contenido = fcfDao::$con->real_escape_string($contenido);
		$query = "INSERT INTO noticias_cuerpo (COD_NOTICIA,COD_PORTAL,LIN_ORDEN,LIN_CUERPO)
					VALUES ($cod_noticia,
					        100,
					        'LIN_ORDEN',
					        '".$contenido."');";
		return $query;
	}
	
	/**
	 * 
	 */
	function updateNoticiaCreada($info){

		try {
			/* Definimos autocommit false para iniciar transaccion */
			fcfDao::$con->autocommit(FALSE);
			/* Insertarmos noticia en la tabla noticias */
			$res = fcfDao::$con->query($this->updateNoticia($info));
			//si falla la query lanzamos excepcion
			if($res === false) {
				throw new \Exception('Error: '.fcfDao::$con->error);
			}
			/* Insertamos el contenido de la noticia en la tabla noticias_cuerpo,con el codigo de noticia retornado de la funcion nuevaNoticia */
			$res = fcfDao::$con->query($this->updateContenidoNoticia($info->cod_noticia,$info->contingut));
		
			if($res === false) {
				throw new \Exception('Error: '.fcfDao::$con->error);
			}
			//Hacemos commit a las dos consultas
			fcfDao::$con->commit();
			$aux = new \stdClass();
			$aux->result = true;
			$aux->cod_noticia = $info->cod_noticia;
			return $aux;
		
		} catch (\Exception $e) {
			fcfDao::$con->rollback();
			return false;
		}
		/* switch back autocommit status */
		fcfDao::$con->autocommit(TRUE);
	}
	
	
	function updateNoticia($info){
		$autor = fcfDao::$con->real_escape_string($info->autor);
		$titulo = fcfDao::$con->real_escape_string($info->titulo);
		$avantitol = fcfDao::$con->real_escape_string($info->avantitol);
		$resumen = fcfDao::$con->real_escape_string($info->resumen);
		$fecha_caducidad = Utils::unixToMySQL($info->fecha_caducidad);
		$fecha_publicacion = Utils::unixToMySQL($info->fecha_publicacion);
		$video_noticia = fcfDao::$con->real_escape_string($info->video_noticia);
		if(!empty($info->publicada) and $info->publicada == 'on'){ $publicada = true; }else{ $publicada = false; }
		
		$queryString = "UPDATE noticias SET `IDIOMA` = ".$info->idioma.",
						  `AUTOR` = '".$autor."',
						  `TITULO` = '".$titulo."',
						  `ABSTRACT` = '".$resumen."',
						  `ANTETITULO` = '".$avantitol."',
						  `IMAGEHOME` = '".$info->imagen_portada."',
						  `PUBLICADA` = ".$publicada.",
						  `VIDEO` = ".$info->video.",
						  `VIDEO_NOTICIA` = '".$video_noticia."',
						  `GALERIA_ASOCIADA` = '".$info->galeria_asociada."',
						  `FECHA_PUBLICACION` = '".$fecha_publicacion."',
						  `FECHA_CADUCIDAD` = '".$fecha_caducidad."',
						  `CATEGORIA` = ".$info->categoria."
						WHERE `COD_NOTICIA` = ".$info->cod_noticia.";";
		return $queryString;
	}
	
	function updateContenidoNoticia($cod_noticia,$contenido){
		$contenido = fcfDao::$con->real_escape_string($contenido);
		$queryString = "UPDATE noticias_cuerpo SET LIN_CUERPO = '".$contenido."' WHERE COD_NOTICIA = ".$cod_noticia;
		return $queryString;
	}
	/*
	 * Añade registro de cada notificacion por twitter
	 */
	function insertNotificacionTwitter($data){
	
		$texto = fcfDao::$con->real_escape_string($data->texto);
	
		try {
			return $this->insert("INSERT INTO noticias_not_twitter (id,cod_noticia,id_tweet,tweet,fecha,usuario,eliminado)
								  VALUES (null,".$data->cod_noticia.",null,'".$texto."',CURRENT_TIMESTAMP,'".$data->usuario."',false);");
		}catch (\Exception $e) {
			Logger::insert(__CLASS__.":".__FUNCTION__,$e,$queryString);
		}
	}
	
	
	/*
	 * Añade registro de cada notificacion que se realiza por email
	 */
	function insertNotificacionEmails($data){
	
		$contenido = fcfDao::$con->real_escape_string($data->contenido);
		$mails = fcfDao::$con->real_escape_string(json_encode($data->mails));
		$result = fcfDao::$con->real_escape_string(json_encode($data->result));
		$texto = fcfDao::$con->real_escape_string($data->texto);
		
		try {
			return $this->insert("INSERT INTO noticias_not_email (id,cod_noticia,texto,contenido,mails,result,fecha,usuario)
									VALUES (null,
									        ".$data->cod_noticia.",
									        '".$texto."',
									        '".$contenido."',
									        '".$mails."',
									        '".$result."',
									        CURRENT_TIMESTAMP,
									        ".$data->usuario.");");
		}catch (\Exception $e) {
			Logger::insert(__CLASS__.":".__FUNCTION__,$e,$queryString);
		}
	}
	
	/*
	 * 
	 */
	
	function getRegistroNotificacionTwitter($cod_noticia){
		try {
			return $this->selectRow("SELECT * FROM noticias_not_twitter WHERE cod_noticia=".$cod_noticia) ;
		}catch (\Exception $e) {
			Logger::insert(__CLASS__.":".__FUNCTION__,$e,$queryString);
		}
	}
	
	/*
	 * 
	 */
	
	function getRegistroNotificacionEmail($cod_noticia){
		try {
			return $this->selectRow("SELECT * FROM noticias_not_email WHERE cod_noticia=".$cod_noticia) ;
		}catch (\Exception $e) {
			Logger::insert(__CLASS__.":".__FUNCTION__,$e,$queryString);
		}
	}
}



?>